package com.totoro.dubbo.properties;

import com.sun.istack.internal.NotNull;
import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

/**
 * 服务提供者暴露服务配置
 *
 * @see http://dubbo.apache.org/books/dubbo-user-book/references/xml/dubbo-service.html
 * Created by Niki on 2018/7/3 9:40
 */
@Configuration
@ConfigurationProperties(prefix = "dubbo.service")
@Getter
@Setter
public class ServiceConfigProperties {
    /**
     * 服务接口名（全名称）
     */
    @NotNull
    private String interfaceStr;
    /**
     * 服务对象实现引用
     */
    @NotNull
    private Object ref;
    /**
     * 服务版本
     */
    private String version;
    /**
     * 敷五分组
     */
    private String group;
    /**
     * 服务路径
     */
    private String path;
    /**
     * 延迟注册服务时间、
     * 设为-1时，表示延迟到Spring容器初始化完成时暴露服务
     */
    private Integer delay;
    /**
     * 远程服务调用超时时间
     */
    private Integer timeout;
    /**
     * 远程服务调用重试次数，不包括调用次数
     */
    private Integer retries;
    /**
     * 对每个提供者的最大连接数
     * rmi、http、hessian等短连接协议表示限制连接数
     * dubbo等长连接表示建立的长连接数
     */
    private Integer connections;
    /**
     * 服务负载策略
     * random,roundrobin,leastactive，分别表示：随机，轮循，最少活跃调用
     */
    private String loadbalance;
    /**
     * 是否异步执行
     */
    private boolean async;
    /**
     * 设为true，表示使用缺省代理类名，即：接口名 + Local后缀，服务接口客户端本地代理类名，用于在客户端执行本地逻辑，如本地缓存等，该本地代理类的构造函数必须允许传入远程代理对象，构造函数如
     */
    private boolean stub;
    /**
     * 为true，表示使用缺省Mock类名，即：接口名 + Mock后缀，服务接口调用失败Mock实现类，该Mock类必须有一个无参构造函数，与Local的区别在于，Local总是被执行，而Mock只在出现非业务异常(比如超时，网络异常等)时执行，Local在远程调用之前执行，Mock在远程调用后执行
     */
    private boolean mock;
    /**
     * 令牌验证，为空表示不开启，如果为true，表示随机生成动态令牌，否则使用静态令牌，令牌的作用是防止消费者绕过注册中心直接访问，保证注册中心的授权功能有效，如果使用点对点调用，需关闭令牌功能
     */
    private boolean token;
    /**
     * 向指定注册中心注册
     * 在多个注册中心时使用，值为<dubbo:registry>的id属性，多个注册中心ID用逗号分隔，如果不想将该服务注册到任何registry，可将值设为N/A
     */
    private String registry;

    private boolean provicer;
    /**
     * 服务是否过时
     * 如果设为true，消费方引用时将打印服务过时警告error日志
     */
    private String deprecated;
    /**
     * 服务是否动态祖册
     */
    private boolean dynamic;
    /**
     * 是否打印访问日志
     */
    private boolean accesslog;
    /**
     * 服务负责人
     */
    private String owner;
    /**
     * 服务文档URL
     */
    private String document;
    /**
     * 服务权重
     */
    private String weight;


}
